Current state of the art debug of general purpose processors takes two forms:
1. A lesser set of visibility and control provided through an application interface.
2. A wide range of visibility and control provided with a dedicated debug interface.
In both of the above cases the debug control function provides a means to access debug features on-chip that support visibility into the current state of the processor(s) and even historical information about the state of an application. Some examples of this include: writing/reading system memory, viewing the contents of caches, controlling the execution of application programs, setting/clearing breakpoints, etc.